home *** CD-ROM | disk | FTP | other *** search
/ European Video Atlas / European Video Atlas.iso / install / setup.mst / setup.bin
Text File  |  1995-05-04  |  27KB  |  994 lines

  1. '**************************************************************************
  2. '*                      Attica Installation Program
  3. '*      D.K. 13/8/92    - modified from SAMPLE1.MST 
  4. '*    JMS  12/1/94    
  5. '*    JMS  22/02/94   ....AND FROM SAMPLE2.MST
  6. '**************************************************************************
  7.  
  8. '' *** $DEFINE DEBUG  ''Define for script development/debugging
  9. ''$DEFINE DEBUG
  10.  
  11. '$INCLUDE 'setupapi.inc'
  12. '$INCLUDE 'msdetect.inc'
  13. '$INCLUDE 'myfuncts.inc'
  14.  
  15. ''Dialog ID's
  16. CONST WELCOME       = 100
  17. CONST ASKQUIT       = 200
  18. CONST DESTPATH      = 300
  19. CONST EXITFAILURE   = 400
  20. CONST EXITQUIT      = 600
  21. CONST EXITSUCCESS   = 700
  22. CONST OPTIONS       = 800
  23. CONST OPTIONHELP    = 950
  24. CONST DLG_MINIMUM      = 6400
  25. CONST CUSTINST         = 6200
  26. CONST DLG_STANDARD  = 6100
  27. CONST TOOBIG        = 6300
  28. CONST DLG_COMPLETE        = 6500
  29. CONST DLG_DISABLED        = 6700
  30.  
  31. ''Attica specific Dialog ID's
  32. CONST SINGLE_ID        = 1000
  33. CONST ADMIN_ID         = 1001
  34. CONST NETWORK_ID       = 1002
  35.  
  36. GLOBAL WINDIR$        ''Windows Directory
  37. GLOBAL SYSDIR$        ''System Directory
  38. GLOBAL DEST$        ''destination directory.
  39. GLOBAL SOURCE$      ''Source Directory
  40. GLOBAL OPTIONAL$
  41. GLOBAL TITLE$       ''Title of dialog box
  42. GLOBAL COPYRIGHT$   ''Copyright string
  43. GLOBAL ROMDRIVE$
  44. GLOBAL HIDECD$        ''"TRUE" means hide cd-drive in single user installation
  45. GLOBAL ADDPATH$     ''"ON" or "OFF"
  46. GLOBAL ADDGROUP$    ''"ON" or "OFF"
  47. GLOBAL NEWGROUP$    ''group to add to program manager
  48. GLOBAL ITEMEXE$     ''the .exe file to be executed
  49. GLOBAL TEMPDIR$      ''where the setup files are
  50. GLOBAL CUSTOM$
  51. GLOBAL CMPCOPY$
  52. GLOBAL newopt$
  53. GLOBAL INFO$        '' which section of setup.ini to read
  54. GLOBAL INF_FILE$    '' name of setup .inf file to use
  55. GLOBAL DLGPROC$     ''  which dialog procedure to call
  56. GLOBAL DLG_ID%      ''  which dialog box to use
  57.  
  58. GLOBAL INSMODE$     '' Installation mode
  59. GLOBAL SECTION$
  60. GLOBAL INIFILES$    '' .ini files those require changes
  61. GLOBAL Ini$            '' Full path for temporary setup.ini 
  62. GLOBAL BACKGROUND$    '' Dll contains Background bitmap 
  63. GLOBAL SUBDIR$        '' Subdirectories after Dest directory
  64. GLOBAL Win$
  65. GLOBAL Sys$
  66. GLOBAL DATASOURCE$
  67. GLOBAL IMAGESOURCE$
  68.  
  69. CONST  VAR_MAX% = 6
  70. GLOBAL VarNames$(VAR_MAX%)     '' 1 -- Variable names
  71. GLOBAL VarValues$(VAR_MAX%)     '' 2 -- Sub. Strings
  72.  
  73. ''File Types
  74. CONST MINIMUM     = 1
  75. CONST STANDARD    = 2
  76. CONST COMPLETE    = 3
  77.  
  78. GLOBAL WINDRIVE$    ''Windows drive letter.
  79.  
  80. ''CustInst list symbol names
  81. GLOBAL APPNEEDS$    ''Option list costs per drive
  82. GLOBAL DBNEEDS$
  83. GLOBAL IMAGENEEDS$
  84. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  85. GLOBAL mincost&
  86. GLOBAL stdcost&
  87. GLOBAL compcost&
  88. global newcost&
  89. GLOBAL free&
  90.  
  91. ''Dialog list symbol names
  92. GLOBAL STATUSTEXT$
  93. GLOBAL DRIVETEXT$
  94.  
  95. DECLARE SUB AddOptFilesToCopyList (ftype%)
  96. DECLARE SUB RecalcOptFiles (ftype%)
  97. DECLARE SUB RecalcPath
  98. DECLARE SUB SetDriveStatus (List$)
  99. DECLARE SUB      Install
  100. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  101. DECLARE SUB      AddSectFilesToCopyList (szSect$, szSrc$, szDest$)
  102. DECLARE FUNCTION InitializeInstall LIB "mscuistf.dll" ( hInst%, hWnd% ) AS INTEGER
  103. DECLARE FUNCTION SubVariables( szString$ ) AS STRING
  104. DECLARE FUNCTION FindOptions( szString$ ) AS STRING 
  105. ''***********************************************************************************
  106. ''***********************************************************************************
  107.  
  108. INIT:
  109.  
  110.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  111.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  112.     SECTION$ = "Info Custom"
  113.  
  114. '$IFDEF DEBUG
  115.     OpenLogFile MakePath("C:\temp\", "LOGFILE.OUT"), 0
  116. '$ENDIF ''DEBUG
  117.     
  118.     ret% = InitializeInstall (hinstFrame(), HwndFrame())    ''max window
  119.  
  120.     TEMPDIR$ = GetSymbolValue("STF_SRCINFPATH")
  121.         
  122.     IF TEMPDIR$ = "" THEN
  123.            TEMPDIR$ = GetSymbolValue("STF_CWDDIR")
  124.     END IF
  125.  
  126.  
  127. ''*******************************************************************
  128. ''  set up mode dependant info - single, admin or network:
  129. ''  STF_MODE$ is initialised by _mstest from the command line options
  130. ''*******************************************************************
  131.  
  132.     INSMODE$ = GetSymbolValue("STF_MODE")
  133.  
  134.     SELECT CASE INSMODE$
  135.       
  136.       CASE "NETWORK"
  137.         INFO$ = "Info Net"
  138.         ADDPATH$ = "OFF"
  139.         ADDGROUP$ = "ON"
  140.         GetLocalHardDrivesList "Drives"
  141.         DLGPROC$  = "NetInstallDlgProc"
  142.         DLG_ID% = NETWORK_ID
  143.  
  144.       CASE "ADMIN"
  145.         INFO$ = "Info Admin"
  146.         ADDPATH$ = "OFF"
  147.         ADDGROUP$ = "OFF"
  148.     GetNetworkDrivesList "Drives"
  149.         DLGPROC$  = "AdminInstallDlgProc"
  150.         DLG_ID% = ADMIN_ID
  151.  
  152.       CASE ELSE
  153.         INFO$ = "Info Single"
  154.         ADDPATH$ = "ON"
  155.         ADDGROUP$ = "ON"
  156.     GetLocalHardDrivesList "Drives"
  157.         DLGPROC$  = "SingleInstallDlgProc"
  158.         DLG_ID% = SINGLE_ID
  159.         INSMODE$ = "SINGLE"
  160.     END SELECT
  161.  
  162.  
  163. ''*******************************************************
  164. ''  READ FROM SETUP.INI : product-dependent names
  165. ''*******************************************************
  166.  
  167.      Ini$ = TEMPDIR$ + "setup.ini"
  168.     
  169.     WINDIR$      = GetWindowsDir()
  170.     SYSDIR$      = GetWindowsSysDir()
  171.         NEWGROUP$ = GetIniKeyString( Ini$, INFO$, "GroupName" )
  172.         ITEMEXE$  = GetIniKeyString( Ini$, INFO$, "ExeFiles" )
  173.         INF_FILE$ = GetIniKeyString( Ini$, INFO$, "InfFile" )
  174.     INIFILES$ = GetIniKeyString( Ini$, INFO$, "IniFiles" )
  175.     HIDECD$   = GetIniKeyString( Ini$, INFO$, "HideCD" )
  176.     SUBDIR$   = GetIniKeyString( Ini$, INFO$, "SubDir" )
  177.  
  178.     CUSTOM$   = GetIniKeyString( Ini$, SECTION$, "CustomOptions" )
  179.     CMPCOPY$   = GetIniKeyString( Ini$, SECTION$, "CompleteCopy" )
  180.     DATASOURCE$ = GetIniKeyString( Ini$, SECTION$, "DataFiles" )
  181.     IMAGESOURCE$ = GetIniKeyString( Ini$, SECTION$, "ImageFiles")    
  182.  
  183.  
  184.  
  185. ''************************************************************
  186. ''  Set background bitmap: if no special dll, use mscuistf.dll
  187. ''************************************************************
  188.  
  189.    BACKGROUND$ = GetIniKeyString( Ini$, INFO$, "BkFile" )
  190.    IF BACKGROUND$ = "" THEN 
  191.         BACKGROUND$ = CUIDLL$
  192.     LOGO% = 108
  193.     ELSE 
  194.     LOGO% = 1    
  195.     ENDIF
  196.  
  197.     SetBitmap BACKGROUND$, LOGO%
  198.  
  199. ''*************************************************************
  200. ''  Nice Friendly Welcome to Setup Box
  201. ''*************************************************************
  202.  
  203. WELCOME:
  204.     sz$ = UIStartDlg(CUIDLL$, 100, "FInfodlgProc", 900, HELPPROC$) 
  205.  
  206.     UIPop 1
  207.     if sz$ = "EXIT" then
  208.        GOSUB ASKQUIT
  209.     end if
  210.  
  211. ''*******************************************************
  212. '' default entries for the main dialog box:
  213. ''*******************************************************
  214.  
  215.   
  216.     IF INSMODE$ = "NETWORK" THEN
  217.     DEST$ = WINDIR$
  218.     ELSE
  219.     DEST$ = GetListItem("Drives", 1) + ":\" + GetIniKeyString( Ini$, INFO$, "DestDir" )
  220.     END IF
  221.  
  222.  
  223.     SOURCE$ = GetSymbolValue( "STF_SRCDIR" )
  224.     ROMDRIVE$ = GetRomDrive
  225.     TITLE$ = GetIniKeyString( Ini$, INFO$, "Title" )
  226.     SetTitle TITLE$
  227.  
  228.     COPYRIGHT$ = GetIniKeyString( Ini$, INFO$, "Copyright1" )
  229.     COPYRIGHT$ = COPYRIGHT$+CHR$(10)+GetIniKeyString( Ini$, INFO$, "Copyright2" )
  230.     COPYRIGHT$ = COPYRIGHT$+CHR$(10)+GetIniKeyString( Ini$, INFO$, "Copyright3" )
  231.  
  232.  
  233. ''***************************************************************
  234. ''READ FILES OUT OF INF FILE LIST
  235. ''***************************************************************
  236.  
  237.     SetSymbolValue "Title", TITLE$
  238.     SetSymbolValue "Copyright", COPYRIGHT$
  239.     SetSymbolValue "SourcePath", SOURCE$
  240.     SetSymbolValue "DestPath", DEST$
  241.     SetSymbolValue "RomDrive", ROMDRIVE$
  242.     SetSymbolValue "AddPath", ADDPATH$
  243.     SetSymbolValue "AddGroup", ADDGROUP$
  244.     SetSymbolValue "HideRomDrive", HIDECD$
  245.   
  246.  
  247. ''**********************************************************************
  248. '' Call dialog with path names & add group/path options. Store values.
  249. ''**********************************************************************
  250.  
  251. GETPATH:
  252.     sz$ = UIStartDlg(CUIDLL$, DLG_ID%, DLGPROC$, 900, HELPPROC$ )
  253.  
  254.         UIPop 1
  255.      IF sz$ = "CANCEL" THEN
  256.             GOSUB ASKQUIT
  257.             GOTO GETPATH
  258.         END IF
  259.  
  260.    
  261.     SOURCE$ = GetSymbolValue( "SourcePath" )
  262.     DEST$ = GetSymbolValue( "DestPath" )
  263.     ROMDRIVE$ = GetSymbolValue( "RomDrive" )
  264.     ADDPATH$ = GetSymbolValue( "AddPath" )
  265.     ADDGROUP$ = GetSymbolValue( "AddGroup" )
  266.  
  267.  
  268.     If CUSTOM$ = "ON" Then
  269.      OPTIONAL$ = DEST$
  270.     Else
  271.     OPTIONAL$ = ROMDRIVE$ + ":\"
  272.     End if
  273.  
  274. ''***********************************************************
  275. ''  Initialise substitute run-time variables
  276. ''***********************************************************
  277.  
  278.     VarNames$(0) = "[ROMDRIVE]" 
  279.     VarValues$(0) = ROMDRIVE$ + ":\"
  280.  
  281.     VarNames$(1) = "[DEST]"      
  282.     
  283.    IF INSMODE$ = "SINGLE" THEN
  284.     VarValues$(1) = DEST$
  285.     ELSE
  286.     VarValues$( 1 ) = SOURCE$
  287.     END IF
  288.  
  289.    VarNames$(2) = "[SOURCE]"      
  290.    VarValues$(2) = SOURCE$
  291.  
  292.  
  293.    VarNames$(3) = "[WINDIR]"      
  294.    VarValues$(3) = WINDIR$
  295.  
  296.  
  297.    VarNames$(4) = "[SYSDIR]"      
  298.    VarValues$(4) = SYSDIR$
  299.  
  300.    VarNames$(5) = "[OPTIONAL]"
  301.    VarValues$(5) = OPTIONAL$
  302.  
  303.  
  304.   IF INSMODE$ = "SINGLE" THEN
  305.         Win$ = WINDIR$
  306.         Sys$ = SYSDIR$
  307.     ELSEIF INSMODE$ = "ADMIN" THEN
  308.         Win$ = DEST$
  309.         Sys$ = DEST$
  310.     ELSE
  311.     Win$ = DEST$
  312.     Sys$ = SYSDIR$
  313.     END IF
  314.  
  315. '$ifdef DEBUG
  316.     WriteToLogFile "Directories (Dest,Win,Sys): "+DEST$+", "+Win$+", "+Sys$
  317. '$endif ''DEBUG
  318.  
  319. ''********************************************************
  320. ''Read Inf file & initialise symbols for options dialog box
  321. ''********************************************************
  322.  
  323.    szInfRead$ = TEMPDIR$ + INF_FILE$
  324.     ReadInfFile szInfRead$
  325.  
  326.   
  327.     STATUSTEXT$  = "StatusItemsText"
  328.     DRIVETEXT$   = "DriveStatusText"
  329.          
  330.      FOR i% = 1 TO 3 STEP 1
  331.         AddListItem STATUSTEXT$, ""
  332.      NEXT i%
  333.     
  334.      FOR i% = 1 TO 7 STEP 1
  335.         AddListItem DRIVETEXT$, ""
  336.      NEXT i%
  337.  
  338.     ReplaceListItem DRIVETEXT$, 7, DEST$
  339.  
  340.     ''Disk cost list symbols
  341.     APPNEEDS$   = "AppNeeds"
  342.     DBNEEDS$  = "DbaseNeeds"
  343.     IMAGENEEDS$ = "ImageNeeds"
  344.     EXTRACOSTS$ = "ExtraCosts"
  345.      
  346.     FOR i% = 1 TO 26 STEP 1
  347.           AddListItem EXTRACOSTS$, "0"
  348.         NEXT i%
  349.  
  350.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  351.  
  352.  sz$ = UIStartDlg(CUIDLL$, 6600, "FModelessDlgProc", 0, "")        
  353.     
  354. RecalcPath
  355.     
  356.  UIPop 1
  357.  
  358. '*************************************************************************
  359. '**     Recalculates disk space and sets option status info according
  360. '**     to the current destination path.
  361. '*************************************************************************
  362.  
  363. SUB RecalcPath STATIC
  364.  
  365.     CursorSave% = ShowWaitCursor()
  366.  
  367.          RecalcOptFiles MINIMUM
  368.          RecalcOptFiles STANDARD
  369.       RecalcOptFiles COMPLETE        
  370.     
  371.     RestoreCursor CursorSave%
  372.  
  373. END SUB
  374.  
  375. '*************************************************************************
  376. '**     Recalculates disk space for the given option files and sets
  377. '**     the status info symbol "StatusItemsText".
  378. '*************************************************************************
  379.  
  380. SUB RecalcOptFiles (ftype%) STATIC
  381.     
  382.  
  383.     CursorSave% = ShowWaitCursor()
  384.     ClearCopyList
  385.     AddOptFilesToCopyList ftype%
  386.     fExtra% = 0
  387.  
  388.  
  389.     IF ftype% = MINIMUM THEN
  390.     ListSym$ = APPNEEDS$
  391.      
  392.     ELSEIF ftype% = STANDARD THEN
  393.     ListSym$ = DBNEEDS$
  394.       
  395.     ELSEIF ftype% = COMPLETE THEN
  396.     ListSym$ = IMAGENEEDS$
  397.     END IF
  398.  
  399.  ''Add extra cost to Windows drive for ini/progman, etc.
  400.  
  401.    ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  402.    ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  403.    fExtra% = 1
  404.  
  405.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  406.     cost& = 0
  407.     FOR i% = 1 TO 26 STEP 1
  408.        cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  409.     NEXT i%
  410.  
  411.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  412.  
  413.     IF ftype% = MINIMUM THEN
  414.     mincost& = cost&
  415.     ELSEIF ftype% = STANDARD THEN
  416.     stdcost& = cost&
  417.     ELSE
  418.     compcost& = cost&
  419.     END IF
  420.  
  421.    IF fExtra% THEN
  422.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  423.     END IF
  424.  
  425.     SetDriveStatus ListSym$
  426.     RestoreCursor CursorSave%
  427.     ListSym$ = ""
  428.    
  429. END SUB
  430.  
  431. ''******************************************************************************
  432. ''Call Options install dialog box & process messages
  433. ''******************************************************************************
  434.  
  435. CUSTINST:    
  436.  
  437.   If CUSTOM$ = "ON" Then
  438.     SetSymbolValue "RadioDefault", "2"
  439.  
  440.     If CMPCOPY$ = "ON" Then
  441.       SetSymbolValue "CustomEnable", "YES"
  442.     Else 
  443.       SetSymbolValue "CustomEnable", "NO"
  444.     End If
  445.  
  446.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "OptionsInstallDlgProc", OPTIONHELP, HELPPROC$)    
  447.  
  448.   Else
  449.     sz$ = "CONTINUE"
  450.     
  451.   End If
  452.  
  453.   newopt$ = GetSymbolValue("ButtonChecked")
  454.  
  455.    if newopt$ = "1" then
  456.       newcost& = mincost&
  457.    elseif newopt$ = "3" then
  458.       newcost& = compcost&
  459.    else 
  460.       newcost& = stdcost&
  461.    end if
  462.  
  463.   Select Case sz$
  464.  
  465.     Case "CONTINUE"  ''Install only if it will fit.
  466.    
  467.     If newcost& > free& then
  468.       GOSUB TOOBIG
  469.       ERROR STFERR
  470.     end if    
  471.              
  472.     UIPop 1
  473.         GOTO MSINSTALL      
  474.                 
  475.        
  476.       Case "EXIT"
  477.     GOSUB ASKQUIT
  478.     GOTO CUSTINST
  479.     
  480.       Case "CANCEL"
  481.     UIPop 1
  482.     GOTO GETPATH
  483.      
  484.       Case "CHK1"
  485.     RecalcOptFiles MINIMUM
  486.         GOTO CUSTINST
  487.  
  488.       Case "CHK2" 
  489.     RecalcOptFiles STANDARD
  490.         GOTO CUSTINST
  491.  
  492.       Case "CHK3"    
  493.         RecalcOptFiles COMPLETE
  494.         GOTO CUSTINST
  495.  
  496.       Case "BTN1" 
  497.     GOSUB INFO1
  498.         GOTO CUSTINST
  499.  
  500.       Case "BTN2" 
  501.     GOSUB INFO2
  502.         GOTO CUSTINST
  503.  
  504.       Case "BTN3"    
  505.         GOSUB INFO3
  506.            GOTO CUSTINST    
  507.       
  508.      Case "REACTIVATE"
  509.     RecalcPath
  510.         GOTO CUSTINST
  511.     
  512.       Case Else
  513.         GOSUB ASKQUIT
  514.         GOTO CUSTINST
  515.  
  516.     End Select
  517.  
  518.  
  519. ''**************************************************************
  520. ''  Tidy Up
  521. ''**************************************************************
  522.  
  523.     RemoveSymbol "Title"
  524.     RemoveSymbol "Copyright"
  525.     RemoveSymbol "SourcePath"
  526.     RemoveSymbol "DestPath"
  527.     RemoveSymbol "RomDrive"
  528.     RemoveSymbol "AddPath"
  529.     RemoveSymbol "AddGroup"
  530.     RemoveSymbol "ButtonChecked"
  531.     RemoveSymbol "CustomEnable"
  532.     RemoveSymbol "RadioDefault"
  533.  
  534. ''**************************************************************
  535. '' call install procedure
  536. ''**************************************************************
  537.  
  538. MSINSTALL:
  539.  
  540.      AddToBillboardList CUIDLL$, 5000, "FModelessDlgProc", 10
  541.      Install
  542.      UIPop 1
  543.  
  544.  
  545.  
  546.  
  547. ''************************************************************************
  548. '**     Adds the specified option files to the copy list.
  549. '*************************************************************************
  550.  
  551. SUB AddOptFilesToCopyList (ftype%) STATIC
  552.  
  553.     If ftype% = MINIMUM or ftype% = STANDARD or ftype% = COMPLETE Then
  554.     
  555.          AddSectFilesToCopyList "Network Win Files", SOURCE$, Win$
  556.          AddSectFilesToCopyList "Network Sys Files", SOURCE$, Sys$  
  557.     
  558.           If INSMODE$ = "SINGLE" or INSMODE$ = "ADMIN" THEN
  559.  
  560.         AddSectFilesToCopyList "Single Win Files", SOURCE$, Win$
  561.           AddSectFilesToCopyList "Single Sys Files", SOURCE$, Sys$  
  562.  
  563.               End If
  564.  
  565.         IF INSMODE$ = "ADMIN" THEN
  566.            AddSectFilesToCopyList "Admin Win Files", SOURCE$, Win$
  567.            AddSectFilesToCopyList "Admin Sys Files", SOURCE$, Sys$
  568.             END IF    
  569.     
  570.     End If
  571.  
  572.     If ftype% = STANDARD or ftype% = COMPLETE Then
  573.             
  574.                      
  575.            AddSectFilesToCopyList "Network Files", SOURCE$, DEST$
  576.              
  577.             IF INSMODE$ = "SINGLE" OR INSMODE$ = "ADMIN" THEN
  578.           
  579.            AddSectFilesToCopyList "Single Files", SOURCE$, DEST$
  580.         
  581.           count% = 1
  582.             subcur$ = GetNthFieldFromIniString( SUBDIR$, count% )
  583.  
  584.                  WHILE subcur$ <> ""
  585.                 AddSectFilesToCopyList "Single " + subcur$ + " Files", SOURCE$, DEST$ + subcur$ + "\"
  586.                 count% = count% + 1
  587.                 subcur$ = GetNthFieldFromIniString( SUBDIR$, count% )
  588.                    WEND
  589.  
  590.             END IF         
  591.             
  592.           IF INSMODE$ = "ADMIN" THEN
  593.            AddSectFilesToCopyList "Admin Files", SOURCE$, DEST$
  594.           END IF    
  595.  
  596.        End If    
  597.  
  598.     If ftype% =  COMPLETE Then
  599.  
  600.         AddSectFilesToCopyList "Database Files", SOURCE$, DEST$
  601.         AddSectFilesToCopyList "Image Files", SOURCE$, DEST$
  602.                       
  603.            End If
  604. END SUB
  605.  
  606. '***************************************************************************
  607. '** Purpose:
  608. '**     Sets drive status info according to latest disk space calcs.
  609. '*************************************************************************
  610.  
  611. SUB SetDriveStatus (List$) STATIC
  612.  
  613.     drive$ = MID$(DEST$, 1, 1)
  614.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  615.     newcost& = VAL(GetListItem(List$, ndrive%))
  616.     free& = GetFreeSpaceForDrive(drive$)
  617.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  618.     ReplaceListItem DRIVETEXT$, 2, STR$(newcost& / 1024) + " K"
  619.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  620. END SUB
  621.  
  622. '*************************************************************************
  623. ''**     Appends a file name to the end of a directory path,
  624. '**     inserting a backslash character as needed.
  625. '*************************************************************************
  626.  
  627. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  628.     IF szDir$ = "" THEN
  629.         MakePath = szFile$
  630.     ELSEIF szFile$ = "" THEN
  631.         MakePath = szDir$
  632.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  633.         MakePath = szDir$ + szFile$
  634.     ELSE
  635.         MakePath = szDir$ + "\" + szFile$
  636.     END IF
  637. END FUNCTION
  638.  
  639. ''*************************************************************************
  640. ''   Bastardised version of AddSectionFilesToCopyList
  641. ''   that does nothing if the section does not exist
  642. ''*************************************************************************
  643.  
  644. SUB AddSectFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  645.     
  646. szInf$ = TEMPDIR$ + INF_FILE$
  647.  
  648.     if DoesIniSectionExist( szInf$, szSect$) then
  649.        
  650.      IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  651.  
  652.         '$ifdef DEBUG
  653.             WriteToLogFile "AddSectFilesToCopyList: "+szSect$+", "+szSrc$+", "+szDest$+", "+szInf$
  654.             WriteToLogFile "Checking for ini file section : "+szSect$+" "
  655.      '$endif ''DEBUG
  656.     
  657.         ERROR STFERR
  658.         END IF
  659.  
  660.     end if
  661.  
  662. END SUB
  663.  
  664. ''***********************************************
  665. '' This function subsitutes pre-defined 
  666. '' variables with their run-time values
  667. ''***********************************************
  668.  
  669. FUNCTION SubVariables( szString$ ) STATIC AS STRING 
  670.  
  671.  
  672.     DIM pos%, lastpos%
  673.     DIM Temp$
  674.  
  675.     FOR I% = 0 TO VAR_MAX - 1 STEP 1
  676.  
  677.         lastpos% = 0
  678.         pos% = INSTR( 1, szString$, VarNames$( I% ) )
  679.             
  680.         WHILE pos% > lastpos% 
  681.  
  682.             lastpos% = Len( VarNames$( I% ) ) + pos% 
  683.             Temp$ = MID$( szString$, 1, pos% - 1 )
  684.             Temp$ = Temp$ + VarValues$( I% )
  685.             Temp$ = Temp$ + MID$( szString$, lastpos%, Len( szString$ ) - lastpos% + 1 )
  686.             lastpos% = pos% + Len( VarValues$( I% ) )
  687.             szString$  = Temp$
  688.             pos% = InStr( lastpos%, szString$, VarNames$( I% ) )
  689.             
  690.         WEND
  691.    
  692.     NEXT I%
  693.  
  694.     SubVariables$ = szString$
  695.  
  696. END FUNCTION
  697.  
  698. '**************************************************************************
  699. ''Search for an optional copyable file on the cd, and return the path only
  700. '**************************************************************************
  701.  
  702. FUNCTION FindOptions( szString$ ) STATIC AS STRING 
  703.  
  704.     src$ = FindFileInTree(szString$, ROMDRIVE$ + ":\")
  705.     If src$ = "" Then
  706.       i% = DoMsgBox(szString$ + " is not found on the CD", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  707.      Else
  708.       pos% = InStr(1, UCASE$(src$), UCASE$(szString$))
  709.       src$ = MID$(src$, 1, pos% - 1)
  710.     End If
  711.  
  712.     FindOptions = src$
  713.  
  714. END FUNCTION
  715.  
  716. '************************************************************************
  717. '** Purpose:
  718. '**     Builds the copy list and performs all installation operations.
  719. '*************************************************************************
  720.  
  721. SUB Install STATIC
  722.     
  723.     CursorSave% = ShowWaitCursor()
  724.     CreateDir DEST$, cmoNone
  725.  
  726.     ClearCopyList    
  727.     
  728.     If newopt$ = "1" Then
  729.       AddOptFilesToCopyList MINIMUM
  730.     Elseif newopt$ = "3" Then
  731.       AddOptFilesToCopyList COMPLETE
  732.     Else
  733.       AddOptFilesToCopyList STANDARD
  734.     End If
  735.  
  736.     SetCopyGaugePosition 20, 175
  737.     
  738.     RestoreCursor CursorSave%
  739.  
  740.     '$ifdef DEBUG
  741.     DumpCopyList "c:\temp\copy.out"
  742.     '$endif
  743.     
  744.     CopyFilesInCopyList
  745.  
  746.     ClearCopyList
  747.  
  748. ''*******************************************
  749. ''  modify .ini files to subsitute variables
  750. ''*******************************************
  751.  
  752. IF INSMODE$ <> "ADMIN" THEN
  753.    count%  = 1
  754.    inicur$ = GetNthFieldFromIniString( INIFILES$, count% )
  755.  
  756.     WHILE inicur$ <> "" 
  757. '$ifdef DEBUG
  758.   WriteToLogFile "Ini File: " + inicur$ + " of " + INIFILES$
  759. '$endif ''DEBUG
  760.  
  761.      index% = 1
  762.      inikeys$ = GetIniKeyString( Ini$, INFO$, inicur$ + Str$(index%) )
  763.  
  764. '$ifdef DEBUG
  765.   WriteToLogFile "Getting " + inicur$ + Str$(index%)
  766. '$endif ''DEBUG
  767.  
  768.     WHILE inikeys$ <> "" 
  769.  
  770. '$ifdef DEBUG
  771.     WriteToLogFile inicur$ + Str$(index%) + " = " + inikeys$
  772. '$endif ''DEBUG
  773.  
  774.     section$ = GetNthFieldFromIniString( inikeys$, 1 )
  775.  
  776.     IF section$ <> "" THEN
  777.  
  778.            keycount% = 2
  779.        keycur$ = GetNthFieldFromIniString( inikeys$, keycount% )
  780.  
  781. '$ifdef DEBUG
  782.     WriteToLogFile inikey$ + Str$(keycount%) + " = " + keycur$
  783. '$endif ''DEBUG
  784.  
  785.        WHILE keycur$ <> ""
  786.     
  787.     keyval$ = GetIniKeyString( WINDIR$ + inicur$, section$, keycur$ )
  788.  
  789.     
  790.       IF keyval$ <> "" THEN
  791.         
  792.                         
  793. '$ifdef DEBUG
  794.     WriteToLogFile "Old Ini Value in " + WINDIR$ + inicur$ + ": [" + section$ + "], " + keycur$ + " = " + keyval$ + " -->"
  795. '$endif ''DEBUG
  796.        
  797.           keyval$ = SubVariables( keyval$ )
  798.           CreateIniKeyValue WINDIR$ + inicur$, section$, keycur$, keyval$, cmoOverwrite
  799.  
  800.       END IF
  801.         keycount% = keycount% + 1
  802.         keycur$ = GetNthFieldFromIniString( inikeys$, keycount% )
  803.        WEND
  804.                 
  805.      END IF
  806.             
  807.     index% = index% + 1
  808.     inikeys$ = GetIniKeyString( Ini$, INFO$, inicur$+Str$(index%) )
  809.             
  810.    WEND
  811.  
  812.     count% = count% + 1
  813.     inicur$ = GetNthFieldFromIniString( INIFILES$, count% )
  814. WEND
  815.  
  816. END IF
  817.  
  818. ''**************************
  819. '' Add Program Item
  820. ''**************************
  821.  
  822.     IF ADDGROUP$ = "ON" THEN
  823.  
  824.        IF  INSMODE$ = "NETWORK" THEN
  825.             ExeDir$ = SOURCE$
  826.         ELSE
  827.             ExeDir$ = DEST$
  828.        END IF
  829.        
  830.     CreateProgmanGroup NEWGROUP$, "", cmoNone
  831.     ShowProgmanGroup  NEWGROUP$, 1, cmoNone
  832.  
  833.     count% = 1
  834.     program$ = GetNthFieldFromIniString( ITEMEXE$, count% )
  835.     
  836.            WHILE program$ <> ""
  837.  
  838.         command$  = GetIniKeyString( Ini$, INFO$, program$ )
  839.         itemname$ = GetNthFieldFromIniString( command$, 1 )
  840.         option$   = GetNthFieldFromIniString( command$, 2 )
  841.                 iconname$ = GetNthFieldFromIniString( command$, 3 )
  842.  
  843.             IF iconname$ <> "" THEN
  844.                 iconidx$  = GetNthFieldFromIniString( command$, 4 )
  845.  
  846.                 IF iconidx$ <> "" THEN
  847.                     iconname$ = iconname$ + "," + iconidx$
  848.                     iconx$    = GetNthFieldFromIniString( command$, 5 )
  849.  
  850.                     IF iconx$ <> "" THEN
  851.                         iconname$ = iconname$ + "," + iconx$
  852.                         icony$    = GetNthFieldFromIniString( command$, 6 )
  853.  
  854.                       IF icony$ <> "" THEN
  855.                           iconname$ = iconname$ + "," + icony$
  856.                           workdir$  = GetNthFieldFromIniString( command$, 7 )
  857.  
  858.                             IF workdir$ <> "" THEN
  859.                                 iconname$ = iconname$ + "," + workdir$
  860.                         END IF
  861.                       
  862.                END IF
  863.                     END IF
  864.                 END IF
  865.             END IF
  866.  
  867.             option$   = SubVariables( option$ )
  868.             iconname$ = SubVariables( iconname$ )
  869.             command$  = MakePath( ExeDir$, program$ ) + " " + option$
  870.  
  871.             CreateProgmanItem NEWGROUP$, itemname$, command$, iconname$, cmoOverwrite
  872.  
  873.         count% = count% + 1
  874.         program$ = GetNthFieldFromIniString( ITEMEXE$, count% )
  875.     WEND
  876.  
  877.     END IF
  878.  
  879. ''**************************
  880. '' Add Path
  881. ''**************************
  882.  
  883.     IF ADDPATH$ = "ON" THEN
  884.         GetLocalHardDrivesList "HardDrvs"
  885.         drv$ = GetListItem("HardDrvs", 1) + ":\"
  886.         IF DoesFileExist(drv$+"autoexec.bat", femExists ) THEN
  887.             PrependToPath drv$+"autoexec.bat", drv$+"autex.tmp", DEST$, cmoNone
  888.             RemoveFile drv$+"autoexec.old", cmoNone
  889.             BackupFile drv$+"autoexec.bat", "autoexec.old"
  890.             RenameFile drv$+"autex.tmp", "autoexec.bat"
  891.         END IF
  892.     END IF
  893.  
  894.  
  895. ''****************************************
  896. ''  Close Log file 
  897. ''****************************************
  898.  
  899. '$IFDEF DEBUG
  900.     CloseLogFile
  901. '$ENDIF
  902.  
  903. END SUB
  904. 
  905. ''*******************************************************
  906. ''GOTOs
  907. ''*******************************************************
  908.  
  909. QUIT:
  910.     ON ERROR GOTO ERRQUIT
  911.  
  912.     IF ERR = 0 THEN
  913.         dlg% = EXITSUCCESS
  914.     ELSEIF ERR = STFQUIT THEN
  915.         dlg% = EXITQUIT
  916.     ELSE
  917.         dlg% = EXITFAILURE
  918.     END IF
  919.  
  920. QUITL1:
  921.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  922.     IF sz$ = "REACTIVATE" THEN
  923.         GOTO QUITL1
  924.     END IF
  925.     UIPop 1
  926.  
  927.     END
  928.  
  929. ERRQUIT:
  930.     i% = DoMsgBox("Setup sources were corrupted, call (0865) 791346", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  931.     END
  932.  
  933.  
  934. INFO1:
  935.    
  936.     DLGBX% = DLG_MINIMUM
  937.    
  938.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  939.     IF temp$ = "REACTIVATE" THEN
  940.         GOTO INFO1
  941.     END IF
  942.     UIPop 1
  943.     RETURN
  944.  
  945. INFO2:
  946.     
  947.     DLGBX% = DLG_STANDARD
  948.     
  949.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  950.     IF temp$ = "REACTIVATE" THEN
  951.         GOTO INFO2
  952.     END IF
  953.     UIPop 1
  954.     RETURN
  955.  
  956. INFO3:
  957.     IF CMPCOPY$ = "OFF" THEN
  958.     DLGBX% = DLG_DISABLED
  959.     ELSE
  960.     DLGBX% = DLG_COMPLETE
  961.     END IF
  962.  
  963.     temp$ = UIStartDlg(CUIDLL$, DLGBX%, "FInfo0DlgProc", 0, "")
  964.     IF temp$ = "REACTIVATE" THEN
  965.         GOTO INFO3
  966.     END IF
  967.     UIPop 1
  968.     RETURN
  969.  
  970.  
  971.  
  972. ASKQUIT:
  973.     temp$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  974.  
  975.     IF temp$ = "EXIT" THEN
  976.         UIPopAll
  977.         ERROR STFQUIT
  978.     ELSEIF temp$ = "REACTIVATE" THEN
  979.         GOTO ASKQUIT
  980.     ELSE
  981.         UIPop 1
  982.     END IF
  983.     RETURN
  984.  
  985. TOOBIG:
  986.     temp$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  987.     IF temp$ = "REACTIVATE" THEN
  988.         RecalcPath
  989.         'SetDriveStatus
  990.         GOTO TOOBIG
  991.     END IF
  992.     UIPop 1
  993.     RETURN
  994.